Non-volatile memory systems, such as flash memory, have been widely adopted for use in consumer products. Flash memory may be found in different forms, for example in the form of a portable memory card that can be carried between host devices or as a solid state disk (SSD) embedded in a host device.
Some flash memory management systems employ self-caching architectures for data buffering and data caching. For example, caching may be used for data buffering where data received from the host device is first stored in a portion of the memory designated as the cache and is later copied to a portion of the flash memory designated as a main storage area (such as a multi-level cell (MLC) type flash memory). As another example, caching may be used for control data storage to improve operation time.
One way to configure the memory for caching is to assign a fixed permanent portion of the on-chip memory for data buffering and control data caching. The size of the fixed permanent portion is selected to be large enough to handle corner cases, such as large sequential accesses or error cases, resulting in an over-provisioning of the data buffer/cache. This over-provisioning runs directly contrary to typical cost-constraints for flash memory controller design since the amount of on-chip memory for data buffering and control data caching is typically limited.
Another way to configure the memory for caching is to assign a temporary control data cache. However, using a temporary control data cache has problems when the memory is reclaimed for another use. Thus, what is needed is a more efficient or easier way to manage a data cache.